X-MimeOLE: Produced By Microsoft Exchange V6.5
Received: by onstor-exch02.onstor.net 
	id <01C92FD8.A9ACA781@onstor-exch02.onstor.net>; Thu, 16 Oct 2008 14:46:36 -0700
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----_=_NextPart_001_01C92FD8.A9ACA781"
Content-class: urn:content-classes:message
Subject: RE: Functional Spec for Restarting Aborted Mirror Sessions
Date: Thu, 16 Oct 2008 14:46:35 -0700
Message-ID: <BB375AF679D4A34E9CA8DFA650E2B04E0C0D879B@onstor-exch02.onstor.net>
In-Reply-To: <BB375AF679D4A34E9CA8DFA650E2B04E0C0D8754@onstor-exch02.onstor.net>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: Functional Spec for Restarting Aborted Mirror Sessions
Thread-Index: Ackvwc2p16X2XnVpSBWREx63PQrjQQADPGaAAABkD3AAAeHo0A==
References: <BB375AF679D4A34E9CA8DFA650E2B04E0C0D86BA@onstor-exch02.onstor.net> <BB375AF679D4A34E9CA8DFA650E2B04E0C0D8733@onstor-exch02.onstor.net> <BB375AF679D4A34E9CA8DFA650E2B04E0C0D8754@onstor-exch02.onstor.net>
From: "Jonathan Goldick" <jonathan.goldick@onstor.com>
To: "Deepak Veliath" <deepak.veliath@onstor.com>,
	"dl-Design Review" <dl-designreview@onstor.com>
Cc: "dl-Kegg" <dl-Kegg@onstor.com>

This is a multi-part message in MIME format.

------_=_NextPart_001_01C92FD8.A9ACA781
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

See JG>

_____________________________________________
From: Deepak Veliath=20
Sent: Thursday, October 16, 2008 2:05 PM
To: Jonathan Goldick; dl-Design Review
Cc: dl-Kegg
Subject: RE: Functional Spec for Restarting Aborted Mirror Sessions

Hello Jonathan,
1.	Section 5, as you make clear, the key to restarting is to know
what the target has on disk, basically a checkpoint marker.  Since we
send blocks in order can we just periodically write out the last block
number know to have hit disk?  A super-block field would be easy.  While
an implementation note, this would avoid changing the cluster DB and
that is relevant here.  When all the blocks have been received we can
just set the number to the last block number in the file system so it
handles a lot of the cases you have mentioned.

We issue I/Os to read the blocks on the source in order.  But there
seems to be no guarantee the I/Os finish and return in that order.  We
send out blocks to the target as soon as they have been read.  On the
target again the I/O is issued as they come in over the RMC connection
but there seems to be no guarantee of ordering.  I realize our current
IO scheduler might guarantee some sort of ordering, but this could
change in the future.  The mirroring sub-system shouldn't expect it
works a certain way unless the IO scheduler exports a mechanism to
guarantee this ordering.
JG> Max already commented on this.
   =20
2.	Section 6, I'm not sure that the restart command adds a lot,
avoiding the creation of a new snapshot is the only clear addition over
mirror start and that doesn't seem worth creating a new command verb.

Since creating a new snapshot consumes some amount of space (and will
mean space can be allocated as the FS is modified), I felt a "restart"
only command would allow a previously aborted mirror to run through to
completion without potentially consuming space in the FS.
JG> As an architectural principle we want the absolute minimum command
verbs.  Whether or not we have the option of restarting a previously
aborted mirror session is something that mirroring can detect when it
talks to the target, an admin should not need to know that in advance.
It would be much easier to use if mirror start first completed any
aborted session that was relevant/possible and then created a new
snapshot to roll forward.  That way the admin always gets the same
result, a new snapshot and the minimum transfer of blocks.

=20
3.	Section 6, mirror start MIRRORNAME [skiprestart] To date we have
not used whole words for command options in the shell, but instead use
things like -a, -b, etc.  Other than testing, why would a customer ever
want to skip a restart?  While a large transfer can happen at any point,
the real problem here is baseline transfers so if the target is garbage
in some way we can just start over by detecting that, rather than having
the administrator try to figure it out.  This also reduces the test
cases and the need to change the GUI or the CLI.=20

I see a lot of "force" options in the existing mirroring commands --
they were the basis for this choice.  I'll change it to "-s".  As to the
need for such an option, I felt a mechanism to bypass the whole restart
logic and being able to fall-back on to the traditional logic might be
desired by an administrator.  The baseline transfer has nothing to do
with this option and can be completed successfully with or without this
option.
JG> I really don't see a requirement to have this option.  How would an
admin know when to use this?  They have no way of knowing when this is a
good idea, but mirroring should be able to figure it out and do the
right thing.

Thank you,
veliath
=20

=20

=20

________________________________

From: Deepak Veliath=20
Sent: Thursday, October 16, 2008 12:03 PM
To: dl-Design Review
Subject: Functional Spec for Restarting Aborted Mirror Sessions

=20

\\mightydog\software\Kegg\Functional
Specs\RestartAbortedMirrorSessionsFuncSpec.doc
<file:///\\mightydog\software\Kegg\Functional%20Specs\RestartAbortedMirr
orSessionsFuncSpec.doc>=20


------_=_NextPart_001_01C92FD8.A9ACA781
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">
<META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version =
6.5.7653.38">
<TITLE>RE: Functional Spec for Restarting Aborted Mirror =
Sessions</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">See JG&gt;</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2 =
FACE=3D"Tahoma">_____________________________________________<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B><FONT SIZE=3D2 =
FACE=3D"Tahoma">From:</FONT></B></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Tahoma"> Deepak Veliath<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B><FONT SIZE=3D2 =
FACE=3D"Tahoma">Sent:</FONT></B></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Tahoma"> Thursday, October 16, =
2008 2:05 PM<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B><FONT SIZE=3D2 =
FACE=3D"Tahoma">To:</FONT></B></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Tahoma"> Jonathan Goldick; =
dl-Design Review<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B><FONT SIZE=3D2 =
FACE=3D"Tahoma">Cc:</FONT></B></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Tahoma"> dl-Kegg<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B><FONT SIZE=3D2 =
FACE=3D"Tahoma">Subject:</FONT></B></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Tahoma"> RE:</FONT> <FONT SIZE=3D2 FACE=3D"Tahoma">Functional =
Spec for Restarting Aborted Mirror Sessions</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#800000" SIZE=3D2 FACE=3D"Verdana">Hello =
Jonathan,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2 FACE=3D"Verdana">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT> <FONT =
SIZE=3D2 FACE=3D"Verdana">Section 5, as you make clear, the key to =
restarting is to know what the target has on disk, basically a =
checkpoint marker.&nbsp; Since we send blocks in order can we just =
periodically write out the last block number know to have hit =
disk?&nbsp; A super-block field</FONT> <FONT SIZE=3D2 =
FACE=3D"Verdana">w</FONT><FONT SIZE=3D2 FACE=3D"Verdana">ould be =
easy.&nbsp; While an implementation note, this would avoid changing the =
cluster DB and that is relevant here.&nbsp; When all the blocks have =
been received we can just set the number to the last block number in the =
file system so it handles a lot of the case</FONT><FONT SIZE=3D2 =
FACE=3D"Verdana">s</FONT><FONT SIZE=3D2 FACE=3D"Verdana"> you have =
mentioned.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">We issue I/Os to read the blocks on the source in =
order.&nbsp; But there seems to be no guarantee the I/Os finish and =
return in that order.&nbsp; We send out blocks to the target as soon as =
they have been read.&nbsp; On the target again the I/O is i</FONT><FONT =
COLOR=3D"#800000" SIZE=3D2 FACE=3D"Verdana">ssued as they come in over =
the RMC connection but there seems to be no guarantee of ordering.&nbsp; =
I realize our current IO scheduler might guarantee some sort of =
ordering, but this could change in the future.&nbsp; The mirroring =
sub-system shouldn't expect it wor</FONT><FONT COLOR=3D"#800000" =
SIZE=3D2 FACE=3D"Verdana">k</FONT><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">s a certain way unless the IO scheduler exports a =
mechanism to guarantee this ordering.</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">JG&gt; Max already commented =
on this.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2 FACE=3D"Verdana">&nbsp;&nbsp;&nbsp; </FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Section 6, =
I</FONT><FONT SIZE=3D2 FACE=3D"Verdana">&#8217;</FONT><FONT SIZE=3D2 =
FACE=3D"Verdana">m not sure that the restart command adds a lot, =
avoiding the creation of a new snapshot is the only clear addition over =
mirror start and that doesn</FONT><FONT SIZE=3D2 =
FACE=3D"Verdana">&#8217;</FONT><FONT SIZE=3D2 FACE=3D"Verdana">t seem =
worth creating a new command verb.</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#800000" SIZE=3D2 FACE=3D"Verdana">Since creating a new =
snapshot consumes some amount of space (and will mean space can be =
allocated as the FS is modified), I felt a &quot;restart&quot; only =
command would allow a previously aborted mirror to run through to</FONT> =
<FONT COLOR=3D"#800000" SIZE=3D2 FACE=3D"Verdana">completion without =
potentially consuming space in the FS.</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Verdana">JG&gt; As an architectural =
principle we want the absolute minimum command verbs.&nbsp; Whether or =
not we have the option of restarting a previously aborted mirror session =
is something that mirroring can detect when it talks to the target, an =
admin should not need</FONT><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Verdana"> to know that in advance.&nbsp; It would be much easier =
to use if</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"> =
<FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Verdana">m</FONT><FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Verdana">irror =
start</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Verdana"> first =
completed any aborted session that was relevant</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Verdana">/possible</FONT><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Verdana"> and then created a new snapshot to roll =
forward.</FONT><FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Verdana">&nbsp; =
That way the admin always gets the same result, a new snapshot and the =
minimum transfer of blocks.</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2 FACE=3D"Verdana">&nbsp;</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Section 6, mirror =
start MIRRORNAME [skiprestart] To date we have not used whole words for =
command options in the shell, but instead use things like</FONT> <FONT =
SIZE=3D2 FACE=3D"Verdana">&#8211;</FONT><FONT SIZE=3D2 =
FACE=3D"Verdana">a, -b, etc.&nbsp; Other than testing, why would =
a</FONT><FONT SIZE=3D2 FACE=3D"Verdana"> customer ever want to skip a =
restart?&nbsp; While a large transfer can happen at any point, the real =
problem here is baseline transfers so if the target is garbage in some =
way we can just start over by detecting that, rather than having the =
administrator try</FONT> <FONT SIZE=3D2 FACE=3D"Verdana">t</FONT><FONT =
SIZE=3D2 FACE=3D"Verdana">o figure it out.&nbsp; This also reduces the =
test cases and the need to change the GUI or the CLI. </FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#800000" SIZE=3D2 FACE=3D"Verdana">I see a lot of =
&quot;force&quot; options in the existing mirroring commands -- they =
were the basis for this choice.&nbsp; I'll change it to =
&quot;-s&quot;.&nbsp; As to the need for such an o</FONT><FONT =
COLOR=3D"#800000" SIZE=3D2 FACE=3D"Verdana">ption, I felt a mechanism to =
bypass the whole restart logic and being able to fall-back on to the =
traditional logic might be desired by an administrator.&nbsp; The =
baseline transfer has nothing to do with this option and can be =
completed successfully with or w</FONT><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">i</FONT><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">thout this option.</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">JG&gt; I really =
don</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">&#8217;</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">t see a requirement to have this option.&nbsp; =
How would an admin know</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">when</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"> <FONT COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">to use =
this</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT =
COLOR=3D"#000080" SIZE=3D2 FACE=3D"Arial">?&nbsp;</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"> <FONT COLOR=3D"#000080" =
SIZE=3D2 FACE=3D"Arial">T</FONT><FONT COLOR=3D"#000080" SIZE=3D2 =
FACE=3D"Arial">hey have no way of knowing when this is a good idea, but =
mirroring should be able to figure it out and do the right =
thing.</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">Thank you,</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT COLOR=3D"#800000" SIZE=3D2 =
FACE=3D"Verdana">veliath</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">&nbsp;</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">&nbsp;</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">&nbsp;</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">________________________________</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Verdana">From: =
Deepak Veliath </FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Verdana">Sent: =
Thursday, October 16, 2008 12:03 PM</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Verdana">To: =
dl-Design Review</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">Subject: Functional Spec for Restarting Aborted Mirror =
Sessions</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">&nbsp;</FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><A =
HREF=3D"file://\\mightydog\software\Kegg\Functional"><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><U><FONT COLOR=3D"#0000FF" =
SIZE=3D2 FACE=3D"Verdana">\\</FONT><FONT COLOR=3D"#0000FF" SIZE=3D2 =
FACE=3D"Verdana">mightydog\software\Kegg\Functional</FONT></U></SPAN><SPA=
N LANG=3D"en-us"></SPAN></A><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Verdana"> =
Specs\RestartAbortedMirrorSessionsFuncSpec.doc &lt;</FONT></SPAN><SPAN =
LANG=3D"en-us"></SPAN><A =
HREF=3D"file:///\\mightydog\software\Kegg\Functional%20Specs\RestartAbort=
edMirrorSessionsFuncSpec.doc"><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"><U></U><U><FONT COLOR=3D"#0000FF" SIZE=3D2 =
FACE=3D"Verdana">file:///\\mightydog\</FONT><FONT COLOR=3D"#0000FF" =
SIZE=3D2 =
FACE=3D"Verdana">software\Kegg\Functional%20Specs\RestartAbortedMirrorSes=
sionsFuncSpec.doc</FONT></U></SPAN><SPAN LANG=3D"en-us"></SPAN></A><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Verdana">&gt; </FONT></SPAN></P>

<P DIR=3DLTR><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN></P>

</BODY>
</HTML>
------_=_NextPart_001_01C92FD8.A9ACA781--
